
const baseURL = "http://wxprint.beenest.club"
export function login() {
  return new Promise((resolve, reject) => {
    wx.login({
      success: (loginRes) => {
        wx.showModal({
          title: '温馨提示',
          content: '亲，授权微信登录后才能正常使用小程序功能',
          success(res) {
            // 如果用户点击了确定按钮
            if (res.confirm) {
              post("/login", null, { "Authorization": loginRes.code })
                .then((sysRes) => {
                  wx.setStorageSync('cookies', sysRes.cookies[1])
                  if (sysRes.data.code === 200 & !sysRes.data.data) {
                    wx.switchTab({
                      url: '/pages/user/userinfo',
                    })
                  } else {
                    wx.reLaunch({
                      url: '/pages/index/index',
                      fail: console.error
                    })
                    resolve()
                  }
                })
            } else if (res.cancel) {
              // 如果用户点击了取消按钮
              wx.showToast({
                title: '您拒绝了请求,不能正常使用小程序',
                icon: 'error',
                duration: 2000
              });
              return;
            }
          }
        })
      },
      fail(error) {
        reject(error)
      }
    })
  })
}

function request(param) {
  const header = param.header || {}
  header.cookie = wx.getStorageSync('cookies').toString()
  return new Promise((resolve, reject) => {
    wx.request({
      url: baseURL + param.path,
      data: param.data || {},
      header: header,
      method: param.method,
      success: res => {
        if (res && res.statusCode === 401) {
          wx.showModal({
            title: '温馨提示',
            content: '登录过期,请确认重新登录',
            complete: (res) => {
              if (res.confirm) {
                login()
              }
            }
          })
        }
        resolve(res)
      },
      fail: err => {
        wx.removeStorageSync('cookies')
        reject(err)
      }
    })
  })
}
/**
 * 发送 GET 请求到指定路径。
 * @param {string} path - 请求的目标路径。
 * @param {Object} data - 需要发送的数据对象。
 * @returns {Promise} - 返回一个 Promise 对象，解析为请求的响应。
 */
export function get(path, data) {
  return request({ path, data, method: "GET" })
}

/**
 * 发送 POST 请求到指定路径。
 * @param {string} path - 请求的目标路径。
 * @param {Object} data - 需要发送的数据对象。
 * @returns {Promise} - 返回一个 Promise 对象，解析为请求的响应。
 */
export function post(path, data, header = {}) {
  return request({ path, data, method: "POST", header })
}

/**
 * 获取图片路径
 * @param {string} path 
 */
export function imageUrl(path) {
  return `${baseURL}/images/${path}`
}

/**
 * 上传文件
 * @param {string} localPath - 本地文件路径
 * @param {Object} param - 额外参数
 */
export function uploadFile(localPath, param) {
  return new Promise((resolve, reject) => {
    wx.uploadFile({
      url: `${baseURL}/file/upload`,
      filePath: localPath,
      name: 'file',
      header: {
        "Content-Type": "multipart/form-data",
        "cookie": wx.getStorageSync('cookies').toString()
      },
      formData: param,
      success(res) {
        if (res && res.statusCode === 401) {
          wx.showModal({
            title: '温馨提示',
            content: '登录过期,请确认重新登录',
            complete: (res) => {
              if (res.confirm) {
                login()
              }
            }
          })
        }
        resolve(res)
      },
      fail(err) {
        reject(err)
      },
    })
  })
}
